class Sequence // 1 header and 1 chunk of data 
{
private: //'private' means only access data in class 
	void init(unsigned int librarySize=0, unsigned int numberOfNucleotidesInHash=10, unsigned int randomSeed = 0);
	unsigned int ReadFromFile(ifstream & seqin);
	
public: // 'public' means we can access data outside class 'Sequence' 

	int SequenceNumber;
	char ascensionNumber [100];
	char Title [300];
	void SetTitle(const char * title)
	{
		if(strlen(title )< 299)
		{
			strcpy(Title,title);
		}
	}
	char header [300];
	char* sequenceData;
	int* hashTable;
	int sequenceLength; 
	int NucleotiesInHash; 

	int* locationsInLibrary;
	int hashCollisions; 
	int expectedHashCollisions;
	double timeToCreateHash;





	int LocateSequenceInLibrary(Sequence & lib);
	int ResolveAlignment(Sequence & lib);

	bool Sequence::allocateHashTable(); 

	bool createHashTable ();
	bool createHashTableWithAMP();

	bool Sequence::InstrumentedcreateHashTable ();

	int getHashTableSize () 
	{
		return pow (4,NucleotiesInHash);  
	}

	int GetActualHashCollsions();
	int GetHashCollisionTheoretical(unsigned int numberOfItemsToStore, unsigned int hashTableSize);
	void RandomizeSequence(int seed);
	void RetrieveSubseqence(unsigned int start, int length,Sequence & probe);


	~Sequence ();//'~' is a destructor, which we use to clean up our memory. Every Malloc must have a free here
	
	

	Sequence ();
	Sequence (const char* filename);
	Sequence (unsigned int librarySize, unsigned int numberOfNucleotidesInHash, unsigned int randomSeed = 0);
	
};//this is wierd, don't worry 